﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TankController.Dominio
{
    class EntradaQuadrada : EntradaPeriodica
    {
        private int tempo;

        public EntradaQuadrada(int periodo, double amplitudeMaxima, double anguloFase, double nivelDC)
        {
            this.periodo = periodo;
            this.amplitudeMaxima = amplitudeMaxima;
            this.anguloFase = anguloFase;
            this.nivelDC = nivelDC;
        }

        public override double GetValorAmplitude(int unidadeTempo)
        {
            double unidadeTempoPeriodica = unidadeTempo < periodo ? unidadeTempo : unidadeTempo % periodo;

            if (unidadeTempoPeriodica > periodo / 2)
            {
                return 0;
            }
            else
            {
                return amplitudeMaxima;
            }
        }

        public override void GerarPontoSinal(int unidadeTempo, double valorAmplitude, ISinal sinal)
        {
            double valorAmplitudeAnterior = GetValorAmplitude(unidadeTempo - 1);
            double valorAmplitudeReal = GetValorAmplitude(unidadeTempo);
            double valorAmplitudePosterior = GetValorAmplitude(unidadeTempo + 1);

            if (valorAmplitudeReal == amplitudeMaxima && valorAmplitudePosterior == 0)
            {
                sinal.AdicionarPontoRetornaAZero(unidadeTempo, valorAmplitude);
            }
            else if (valorAmplitudeReal == amplitudeMaxima && valorAmplitudeAnterior == 0)
            {
                sinal.AdicionarPontoVemDeZero(unidadeTempo, valorAmplitude);
            }
            else
            {
                sinal.AdicionarPonto(unidadeTempo, valorAmplitude);
            }
        }
    }
}
